#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10;
int n,m,sq,a[MAXN],ans[MAXN],cnt[MAXN];
struct node
{
	int opt,l,r,x,num;
	bool operator<(const node b)const
	{
		return l/sq==b.l/sq?r<b.r:l/sq<b.l/sq;
	}
}q[MAXN];
bitset<MAXN>f,g;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)scanf("%d",&a[i]);
	for(int i=1;i<=m;++i)
	{
		scanf("%d%d%d%d",&q[i].opt,&q[i].l,&q[i].r,&q[i].x);
		sq=max(q[i].r,sq);
		q[i].num=i;
	}
	sq=sqrt(sq);
	sort(q+1,q+1+m);
	int l=1,r=0;
	for(int i=1;i<=m;++i)
	{
		while(l>q[i].l)
		{
			--l;
			if(!cnt[a[l]])
			{
				f[a[l]]=1;
				g[MAXN-a[l]]=1;
			}
			++cnt[a[l]];
		}
		while(r<q[i].r)
		{
			++r;
			if(!cnt[a[r]])
			{
				f[a[r]]=1;
				g[MAXN-a[r]]=1;
			}
			++cnt[a[r]];
		}
		while(l<q[i].l)
		{
			--cnt[a[l]];
			if(!cnt[a[l]])
			{
				f[a[l]]=0;
				g[MAXN-a[l]]=0;
			}
			++l;
		}
		while(r>q[i].r)
		{
			--cnt[a[r]];
			if(!cnt[a[r]])
			{
				f[a[r]]=0;
				g[MAXN-a[r]]=0;
			}
			--r;
		}
		if(q[i].opt==1)
			ans[q[i].num]=((f>>q[i].x)&f).any();
		else if(q[i].opt==2)
			ans[q[i].num]=((g>>(MAXN-q[i].x))&f).any();
		else
		{
			int k=sqrt(q[i].x+1);
			for(int j=1;j<=k;++j)
			{
				if(q[i].x%j!=0)continue;
				if(cnt[q[i].x/j]&&cnt[j])
				{
					ans[q[i].num]=true;
					continue;
				}
			}
		}
	}
	for(int i=1;i<=m;++i)printf(ans[i]?"yuno\n":"yumi\n");
	return 0;
}
